survival
パッケージのsurvfit
関数は、生存時間データのカプランマイヤー推定で用いる関数である。 左側切断があるデータで、想定外の出力で困ったので、その対処法のメモ。
時点begin
で観察開始(左側切断)、時点end
で観察終了、観察終了時の状態がstatus
である。
library(survival)
dat <- data.frame(
id=0:5, # ID
begin=c(0,1,2,3,4,5), # 観察開始時点
end=c(3,4,5,6,7,8), # 観察終了時点
status=c(1,0,1,1,1,1) # 観察終了時の状態(1:イベント発生、0:打ち切り)
)
dat
## id begin end status
## 1 0 0 3 1
## 2 1 1 4 0
## 3 2 2 5 1
## 4 3 3 6 1
## 5 4 4 7 1
## 6 5 5 8 1
擬似データにおける追跡調査の様子の模式図。
summary(km1)
はカプランマイヤー推定による表である。
km1 <- survfit(Surv(end,status)~1,data=dat)
summary(km1)
## Call: survfit(formula = Surv(end, status) ~ 1, data = dat)
##
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 3 6 1 0.833 0.152 0.5827 1
## 5 4 1 0.625 0.213 0.3200 1
## 6 3 1 0.417 0.222 0.1468 1
## 7 2 1 0.208 0.184 0.0368 1
## 8 1 1 0.000 NaN NA NA
km1$time
でイベント発生時点、km1$surv
でその時点での生存率が抽出できると思っていたけど、違ったみたい。 結果から見れば、打ち切り時点である時点4が含まれているので、km1$time
は単にユニークな時間を出力するみたい。
km1$time
## [1] 3 4 5 6 7 8
km1$surv
## [1] 0.8333333 0.8333333 0.6250000 0.4166667 0.2083333 0.0000000
begin
の時点から観察しているとした場合(左側切断あり)summary(km2)
はカプランマイヤー推定による表であり、ちゃんと左側切断の情報も考慮しているのが分かる。
km2 <- survfit(Surv(begin,end,status)~1,data=dat)
summary(km2)
## Call: survfit(formula = Surv(begin, end, status) ~ 1, data = dat)
##
## time n.risk n.event entered censored survival std.err lower 95% CI
## 3 3 1 1 0 0.667 0.272 0.2995
## 5 3 1 1 0 0.444 0.257 0.1433
## 6 3 1 0 0 0.296 0.210 0.0741
## 7 2 1 0 0 0.148 0.148 0.0209
## 8 1 1 0 0 0.000 NaN NA
## upper 95% CI
## 1
## 1
## 1
## 1
## NA
左側切断のある生存時間データの場合、km2$time
で出力されるのは、左側切断時点と観察終了時点のユニークな時点を出力するみたい。 これに気付かずに詰んでた。
km2$time
## [1] 0 1 2 3 4 5 6 7 8
km2$surv
## [1] 1.0000000 1.0000000 1.0000000 0.6666667 0.6666667 0.4444444 0.2962963
## [8] 0.1481481 0.0000000
イベント発生時点のユニークな時点とその生存率が欲しい場合は、下記のようにすれば、とりあえず得られる。
s2 <- summary(km2)
s2$time
## [1] 3 5 6 7 8
s2$surv
## [1] 0.6666667 0.4444444 0.2962963 0.1481481 0.0000000